#ifndef UIADVANCESEARCHDIALOG_H
#define UIADVANCESEARCHDIALOG_H

#include "uiconfirmdialog.h"
/**
 * @class UiAdvanceSearchDialog
 * 这是一个高级搜索对话框的用户界面类，继承自UiConfirmDialog。
 * 提供了添加、移除搜索条件，并能够获取和设置搜索条件列表的功能。
 */
class UiAdvanceSearchDialog : public UiConfirmDialog
{
    Q_OBJECT
public:
    /**
     * 构造函数
     * @param fs 字符串列表，表示可选的搜索字段。
     * @param parent 父QWidget，默认为nullptr。
     */
    UiAdvanceSearchDialog(const QStringList &fs,QWidget* parent = nullptr);

    /**
     * 获取搜索条件列表
     * @return 返回一个QList<QPair<QString, QString>>，包含所有的搜索条件，每个条件是字段名和字段值的对。
     */
    QList<QPair<QString, QString> > getSearchList() const;

    /**
     * 设置搜索条件列表
     * @param value 要设置的搜索条件列表，为QList<QPair<QString, QString>>类型。
     */
    void setSearchList(const QList<QPair<QString, QString> > &value);

private slots:
    /**
     * 确认按钮的槽函数
     * 实现确认操作相关的逻辑。
     */
    void slotConfirm();

    /**
     * 添加按钮的槽函数
     * 实现添加搜索条件相关的逻辑。
     */
    void addItem();

    /**
     * 移除按钮的槽函数
     * 实现移除搜索条件相关的逻辑。
     */
    void removeItem();

private:
    class QPushButton* m_addBtn = nullptr;    // 添加按钮
    class QPushButton* m_removeBtn = nullptr; // 移除按钮
    class QListWidget* m_listWidget = nullptr; // 列表控件，用于显示搜索条件

    QStringList m_fieldList; // 可选的搜索字段列表
    QList<QPair<QString,QString>> searchList; // 搜索条件列表
};

/**
 * @class UiAdvanceSearchItemWidget
 * 这是一个用于表示单个搜索条件的Widget类。
 * 提供了选择搜索字段和输入搜索值的功能。
 */
class UiAdvanceSearchItemWidget: public QWidget
{
    Q_OBJECT
public:
    /**
     * 构造函数
     * @param fs 字符串列表，表示可选的搜索字段。
     * @param parent 父QWidget，默认为nullptr。
     */
    UiAdvanceSearchItemWidget(const QStringList& fs, QWidget* parent = nullptr);

    /**
     * 获取选择的搜索字段
     * @return 返回一个QString，表示当前选择的搜索字段。
     */
    QString getField();

    /**
     * 获取输入框中的文本
     * @return 返回一个QString，表示输入框中的文本。
     */
    QString text();

protected:
    /**
     * 事件过滤器
     * @param watched 被监视的对象。
     * @param event 事件。
     * @return 返回一个bool，表示是否处理了事件。
     */
    bool eventFilter(QObject* watched,QEvent *event) override;

signals:
    /**
     * 焦点进入信号
     * @param bPressCtr 表示是否按下了Ctrl键。
     */
    void sigFocusIn(bool bPressCtr);

private:
    class QComboBox* m_fieldBox = nullptr; // 用于选择搜索字段的下拉框
    class QLineEdit* m_edit = nullptr; // 用于输入搜索值的文本框
};

#endif // UIADVANCESEARCHDIALOG_H
